
from Code_Link_02 import ListNode
from Code_Link_02 import printLink

''' 反转单链表
1->2->3->4->5 反转成
5->4->3->2->1

null  1->2->3->4
p     c  t                         1.tmp = cur.next 保存当前cur节点1的下一节点2
      1  2->null(p)  3->4          2.cur.next = p   cur节点1指向前置节点pre,目前是null
      1<-2 3->4                    3.pre = cur      pre前置节点后移一位成为1，实现了翻转
      pc t
      1-<2 3->4                    4.cur = tmp (1~4步骤实现了翻转)cur节点后移一位
      p  c  
      重复1~4操作
'''
def l206(head:ListNode):
    pre = None
    cur = head
    while cur:
        tmp = cur.next
        cur.next = pre
        pre = cur
        cur = tmp
    return pre
    pass

if __name__ == '__main__':
    link7 = ListNode(7)
    link6 = ListNode(6,link7)
    link5 = ListNode(5,link6)
    link4 = ListNode(4,link5)
    #link3 = ListNode(3,link4)
    link3 = ListNode(3)
    link2 = ListNode(2,link3)
    link1 = ListNode(1,link2)
    printLink(link1)
    res = l206(link1)
    printLink(res)

    #l206(link6)
    pass